var ObjUtils = {
    /**
     * 深拷贝一个对象
     * @param {*} obj 
     */
    clone(obj) {
        let temp = null;
        if (obj instanceof Array) {
            temp = obj.concat();
            temp.forEach((v, i) => {
                temp[i] = this.clone(v);
            }, this);
        } else if (obj instanceof Function) {
            temp = obj;
        } else if (typeof obj === 'string') {
            temp = obj;
        } else {
            temp = new Object();
            for (let item in obj) {
                let val = obj[item];
                temp[item] = ((typeof val == 'object') ? this.clone(val) : val);
            }
        }
        //
        return temp;
    },
    /**
     * 将from上的若干属性复制给to
     * @param {*} from 
     * @param {*} to 
     * @param {*} attrs 需要拷贝的属性名数组，传入null，则复制所有属性。
     * @returns 返回to。
     */
    copyAttrs(from, to, attrs) {
        if (attrs != null) {
            attrs.forEach(attr => {
                to[attr] = from[attr];
            });
        } else {
            // 复制所有属性。
            for (var attr in from)
                to[attr] = from[attr];
        }
        //
        return to;
    },
    /**
     * 获取obj上由attrs指定的属性值，返回键值对对象
     * @param {*} obj 
     * @param {*} attrs 指定的属性名，形如：['name', 'flag', 'position']
     */
    getAttrs(obj, attrs) {
        var ret = {};
        attrs.forEach(a => {
            ret[a] = obj[a];
        });
        //
        return ret;
    },
};

module.exports = ObjUtils;